package mx.frantor.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Utileria de conversion Fecha String a Date y Date a String
 * @author Jorge Castellanos
 *
 */
public class DateUtil {

	private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	private SimpleDateFormat dateFormat2 = new SimpleDateFormat("dd/MM/yy");
	private Date fecha;
	private String cadenaFecha;
	
	/**
	 * Convierte String fecha year/mes/dia a Date
	 * @param stringFecha
	 * @return Null si no puede convertir fecha String a Date, de lo contrario Date
	 */
	public Date getStringToDate(String stringFecha){
		try {
			fecha = dateFormat.parse(stringFecha);
		} catch (ParseException ex) {
			fecha = null;
			System.out.println("No pude convertir de String a Date: " + ex.getMessage());
		}
		return fecha;
	}
	
	/**
	 * Convierte Date fecha a String year/mes/dia
	 * @param fecha
	 * @return Null si no puede convertir fecha Date a String, de lo contrario fecha en String
	 */
	public String getDateToString(Date fecha) {
		try{
			cadenaFecha = dateFormat.format(fecha);
		}catch(NullPointerException exc){
			cadenaFecha = null;
			System.out.println("No pude convertir de Date a String: " + exc.getMessage());
		}
		
		return cadenaFecha;
	}
	
	/**
	 * Convierte String fecha dia/mes/año a Date
	 * @param stringFecha
	 * @return Null si no puede convertir fecha String a Date, de lo contrario Date
	 */
	public Date getStringToDate2(String stringFecha){
		try {
			fecha = dateFormat2.parse(stringFecha);
		} catch (ParseException ex) {
			fecha = null;
			System.out.println("No pude convertir de String a Date: " + ex.getMessage());
		}
		return fecha;
	}
	
	/**
	 * Obtiene el numero de dias transcurridos entre fecha inicial y final
	 * @param primerFecha
	 * @param segundaFecha
	 * @return Numero de dias transcurridos entre las fechas indicadas. Valor numerico tipo long
	 */
	public Long getDiasTranscurridosEntreFechas(Date primerFecha, Date segundaFecha){
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(primerFecha);
		cal2.setTime(segundaFecha);
		
		long milisegundos1 = cal1.getTimeInMillis();
		long milisegundos2 = cal2.getTimeInMillis();
		long diferencia = milisegundos2 - milisegundos1;
		long difDias = diferencia / (24 * 60 * 60 * 1000);
		return difDias;
	}
	
	/**
	 * Obtiene numero de minutos transcurridos entre fechas
	 * @param primerFecha
	 * @param segundaFecha
	 * @return Minutos transcurridos entre primera y segunda fecha parametros
	 */
	public long getMinutosTranscurridosEntreFechas(Date primerFecha, Date segundaFecha){
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(primerFecha);
		cal2.setTime(segundaFecha);
		
		long milisegundos1 = cal1.getTimeInMillis();
		long milisegundos2 = cal2.getTimeInMillis();
		long diferencia = milisegundos2 - milisegundos1;
		
		// calcular la diferencia en minutos
		long difMinutos = diferencia / (60 * 1000);
		return difMinutos;
	}
	
	public long getSegundosTranscurridosEntreFechas(Date primerFecha, Date segundaFecha){
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(primerFecha);
		cal2.setTime(segundaFecha);
		
		long milisegundos1 = cal1.getTimeInMillis();
		long milisegundos2 = cal2.getTimeInMillis();
		long diferencia = milisegundos2 - milisegundos1;
		
		// calcular la diferencia en segundos
		long difSegundos = diferencia /  1000;
		return difSegundos;
	}
}
